/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.proyecto.managed;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import sv.com.intesal.clases.LimpiarManaged;
import sv.com.intesal.clases.Mensaje;
import sv.com.intesal.compra.bean.Material;
import sv.com.intesal.proyecto.bean.Proyecto;
import sv.com.intesal.proyecto.bean.SalidaProyecto;
import sv.com.intesal.proyecto.controlador.ProyectoControlador;
import sv.com.intesal.proyecto.controlador.SalidaProyectoControlador;
import sv.com.intesal.rrhh.bean.Empleado;
import sv.com.intesal.rrhh.controlador.EmpleadoControlador;
import sv.com.intesal.seguridad.controlador.SessionControlador;
import sv.com.intesal.seguridad.managed.SessionManaged;

/**
 *
 * @author JM
 */
@ManagedBean(name = "salidaProyectoManaged")
@ViewScoped
public class SalidaProyectoManaged implements Serializable {

    private Boolean flag_1;
    private Boolean flag_2;
    private SessionManaged sm;
    private Mensaje m;
    private Empleado selectedEmpleado;
    private Proyecto selectedProyecto;
    private Material selectedMaterial;

    /*ENCA*/
    private SalidaProyecto selectedEncaSalidaProyecto;

    /*DETA*/
    private List<SalidaProyecto> detaSalidaProyectos;
    private SalidaProyecto selectedDetaSalidaProyecto;

    public SalidaProyectoManaged() throws Exception {

        this.flag_1 = true;
        this.flag_2 = false;

        selectedEmpleado = new Empleado();
        selectedProyecto = new Proyecto();
        selectedMaterial = new Material();

        selectedEncaSalidaProyecto = new SalidaProyecto();
        selectedDetaSalidaProyecto = new SalidaProyecto();

        sm = new SessionManaged();
        m = new Mensaje();
    }

    public void completeTransaction() {

        try {
            if (this.validar() == true) {
                if (this.getSelectedEncaSalidaProyecto().getId_sp() == null) {
                    if (sm.validar_rol_usuario("wfrmSalidaProyecto", sm.agregar) == true) {

                        this.selectedEncaSalidaProyecto.setId_e(this.getSelectedEmpleado().getId_e());
                        this.selectedEncaSalidaProyecto.setId_p(this.getSelectedProyecto().getId_p());

                        SalidaProyectoControlador sp = new SalidaProyectoControlador();
                        sp.setEnca(this.getSelectedEncaSalidaProyecto(), this.getDetaSalidaProyectos());

                        LimpiarManaged.limpiar();
                    }
                } else {
                    if (sm.validar_rol_usuario("wfrmSalidaProyecto", sm.modificar) == true) {

                        this.selectedEncaSalidaProyecto.setId_e(this.getSelectedEmpleado().getId_e());
                        this.selectedEncaSalidaProyecto.setId_p(this.getSelectedProyecto().getId_p());

                        SalidaProyectoControlador sp = new SalidaProyectoControlador();
                        sp.setEnca(this.getSelectedEncaSalidaProyecto(), this.getDetaSalidaProyectos());

                        LimpiarManaged.limpiar();
                    }
                }

            }
        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }
    }

    public void eliminarRegistro() {
        try {
            if (this.selectedDetaSalidaProyecto == null) {
                m.messageError("DEBE ELEGIR UN REGISTRO PARA CONTINUAR");
            } else if (selectedDetaSalidaProyecto.getId_d() == 0) {
                this.detaSalidaProyectos.remove(selectedDetaSalidaProyecto);
                m.messageInfo(m.getIeliminada());
            } else {
                /*SI AFECTA INVENTARIO*/
                if (sm.validar_rol_usuario("wfrmSalidaProyecto", sm.eliminar) == true) {
                    SalidaProyectoControlador sp = new SalidaProyectoControlador();
                    this.selectedDetaSalidaProyecto.setNumero_documento_sp(this.selectedEncaSalidaProyecto.getNumero_documento_sp());
                    this.selectedDetaSalidaProyecto.setBloque_sp(this.selectedEncaSalidaProyecto.getBloque_sp());
                    this.selectedDetaSalidaProyecto.setId_sp(this.selectedEncaSalidaProyecto.getId_sp());

                    this.detaSalidaProyectos.remove(selectedDetaSalidaProyecto);
                    sp.eliminarItem(selectedDetaSalidaProyecto);
                }
            }
        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }
    }

    public void getMaterial_Quick(Material ma) {

        try {
            this.selectedMaterial = ma;
            if (this.selectedMaterial != null) {
                List<SalidaProyecto> lista = new ArrayList<SalidaProyecto>();
                if (this.getDetaSalidaProyectos() != null) {
                    lista = this.getDetaSalidaProyectos();
                }

                SalidaProyecto sp = new SalidaProyecto();
                sp.setNombre_m(this.getSelectedMaterial().getNombre_m());
                sp.setId_d(0);
                sp.setId_dm(this.getSelectedMaterial().getId_dm());
                sp.setCantidad_d(0.0);
                lista.add(sp);
                this.setDetaSalidaProyectos(lista);
            }
        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }
    }

    private Boolean validar() throws Exception {

        try {
            Boolean value = true;
            if (this.getSelectedProyecto().getId_p() == null) {
                m.messageError("DEBE ELEGIR UN PROYECTO");
                value = false;
            }
            if (this.getSelectedEmpleado().getId_e() == null) {
                m.messageError("DEBE ELEGIR UN EMPLEADO");
                value = false;
            }

            if (this.getSelectedEncaSalidaProyecto().getFecha_sp() == null) {
                m.messageAdvertencia(m.campoError("FECHA"));
                value = false;
            }

            if (this.getSelectedEncaSalidaProyecto().getObservacion_sp() == "") {
                m.messageAdvertencia(m.campoError("OBSERVACION"));
                value = false;
            }
            if (this.getDetaSalidaProyectos() == null) {
                m.messageAdvertencia(m.campoError("MATERIALES"));
                value = false;
            } else if (this.getDetaSalidaProyectos().size() > 0) {
                for (int i = 0; i < this.getDetaSalidaProyectos().size(); i++) {
                    try {
                        if (this.getDetaSalidaProyectos().get(i).getCantidad_d() <= 0) {
                            m.messageAdvertencia("HAY CANTIDADES QUE NO SON ACEPTABLES");
                            value = false;
                            break;
                        }
                    } catch (Exception e) {
                        value = false;
                        break;
                    }
                }
            }

            SalidaProyectoControlador sp = new SalidaProyectoControlador();
            if (sp.validarSalida(this.detaSalidaProyectos) == false) {
                value = false;
            }

            return value;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void validarModificarProceso() {
        SessionControlador sc = new SessionControlador();
        try {
            if (sc.getCodigo_Proceso_Modificar() != 0) {
                this.flag_1 = false;
                this.flag_2 = true;
                this.getDatosModificarProceso(sc.getCodigo_Proceso_Modificar());
                sc.setCodigo_Proceso_Modificar(0);
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    private void getDatosModificarProceso(Integer codigo_sp) throws Exception {

        try {
            SalidaProyectoControlador sp = new SalidaProyectoControlador();
            this.setSelectedEncaSalidaProyecto(sp.getEnca(codigo_sp));

            ProyectoControlador pc = new ProyectoControlador();
            this.setSelectedProyecto(pc.getProyecto(this.getSelectedEncaSalidaProyecto().getId_p()));

            EmpleadoControlador ec = new EmpleadoControlador();
            this.setSelectedEmpleado(ec.getEmpleado(this.getSelectedEncaSalidaProyecto().getId_e()));

            this.setDetaSalidaProyectos(sp.getDeta(this.getSelectedEncaSalidaProyecto().getId_sp()));

        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void getProyecto_Quick(Proyecto p) {
        try {
            this.selectedProyecto = p;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void getEmpleado_Quick(Empleado em) {
        try {
            this.selectedEmpleado = em;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    /*GETTERS AND SETTERS */
    public Boolean getFlag_1() {
        return flag_1;
    }

    public Boolean getFlag_2() {
        return flag_2;
    }

    public List<SalidaProyecto> getDetaSalidaProyectos() {
        return detaSalidaProyectos;
    }

    public void setDetaSalidaProyectos(List<SalidaProyecto> detaSalidaProyectos) {
        this.detaSalidaProyectos = detaSalidaProyectos;
    }

    public SalidaProyecto getSelectedDetaSalidaProyecto() {
        if (selectedDetaSalidaProyecto == null) {
            selectedDetaSalidaProyecto = new SalidaProyecto();
        }
        return selectedDetaSalidaProyecto;
    }

    public void setSelectedDetaSalidaProyecto(SalidaProyecto selectedDetaSalidaProyecto) {
        this.selectedDetaSalidaProyecto = selectedDetaSalidaProyecto;
    }

    public Empleado getSelectedEmpleado() {
        if (selectedEmpleado == null) {
            selectedEmpleado = new Empleado();
        }
        return selectedEmpleado;
    }

    public void setSelectedEmpleado(Empleado selectedEmpleado) {
        this.selectedEmpleado = selectedEmpleado;
    }

    public SalidaProyecto getSelectedEncaSalidaProyecto() {
        if (selectedEncaSalidaProyecto == null) {
            selectedEncaSalidaProyecto = new SalidaProyecto();
        }
        return selectedEncaSalidaProyecto;
    }

    public void setSelectedEncaSalidaProyecto(SalidaProyecto selectedEncaSalidaProyecto) {
        this.selectedEncaSalidaProyecto = selectedEncaSalidaProyecto;
    }

    public Material getSelectedMaterial() {
        if (selectedMaterial == null) {
            selectedMaterial = new Material();
        }
        return selectedMaterial;
    }

    public void setSelectedMaterial(Material selectedMaterial) {
        this.selectedMaterial = selectedMaterial;
    }

    public Proyecto getSelectedProyecto() {
        if (selectedProyecto == null) {
            selectedProyecto = new Proyecto();
        }
        return selectedProyecto;
    }

    public void setSelectedProyecto(Proyecto selectedProyecto) {
        this.selectedProyecto = selectedProyecto;
    }
}
